package com.chengweiyi.security.controller;

import org.springframework.security.access.annotation.Secured;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @Author xiao hu die
 * @Date 2022/5/7 22:17
 * @Version 1.0
 */
@RestController
@RequestMapping("/test")
public class TestController {
    /**
     * InterceptorStatusToken token = super.beforeInvocation(fi);
     * 在调动之前执行FilterSecurityInterceptor.class 起始过滤器
     * ExceptionTranslationFilter 异常过滤器
     * UsernamePasswordAuthenticationFilter 用户名密码过滤器*/
    /**使用SpringSecurity之前必须先配置 在Springboot中已经配置过了 DelegatingFilterProxy
     * UserDetailService接口用来获取用户名密码即从数据库查询的过程也是需要重写成功与失败的方法
     * 创建类继承UsernamePasswordAuthenticationFilter重写三个方法
     * 创建类实现UserDetailService,编写查询的过程返回User对象
     * PasswordEncoder密码加密规则*/
    @GetMapping("/hello")
    public String hello(){
        return "hello security";
    }
    @GetMapping("/index")
    public String index(){
        return "hello index";
    }
    @GetMapping("/update")
    /**用户具有某个(((((角色)))))来决定是否能访问*/
    @Secured({"ROLE_normal","ROLE_admin"})
    public String update(){
        return "hello update";
    }
    /**用户具有某个权限才能访问这个方法*/
    @GetMapping("/delete")
    @PreAuthorize("hasAnyAuthority('most')")
    public String delete(){
        return "hello delete";
    }
    @GetMapping("/add")
    @PreAuthorize("hasAnyAuthority('admin')")
    public String add(){
        System.out.println("add");
        return "hello add";
    }
    @GetMapping("/logout")
    public String logout(){
        return  "退出成功";
    }
}
